Week 2 — Project Management with GitLab

Sep 11 – Dec 2025 · Version Control Git Vinyl Cutter Laser Cutter

Sep 11, 2025: We all got our own repositories to store, update, and document our work process. I've used Git in the past but not recently, so here's a summary of some key concepts I gathered to refresh my memory.

What Is Git?

Git is a distributed version control system used to track changes to files and collaborate on projects. It lets you record snapshots of your code over time and synchronize work across different machines and teammates.

Core Concepts

How Git Works

How to Download a Git Repository to Your Local Disk

1. Go to the Folder Where We Want the Repo

Use cd to move into the directory where we want to download the repository:

Terminal
cd /path/

Example on macOS or Linux:

Terminal
cd ~/Documents/projects

2. Clone the Repository

HTTPS Method (Most Common)

Terminal
git clone https://github.com/username/repository.git

SSH Method (If You Have SSH Keys Set Up)

Terminal
git clone git@github.com:username/repository.git

GitLab Example (MIT GitLab)

Terminal
git clone https://gitlab.cba.mit.edu/classes/863.25/people/YuWang.git

3. What Happens After Cloning?

Git creates a new folder with the same name as the repository:

Terminal
YuWang/
├── .git/
├── index.html
├── Week1/
└── ...

We now have:

4. Optional: Shallow Clone (Without Full History)

If the repository is huge and we just want the latest snapshot, use a shallow clone:

Terminal
git clone --depth 1 <repo-url>

This behaves more like a "zip download" of the latest state.

5. Download as ZIP Using Command Line (GitHub Example)

If we really don't want to use git clone, we can download the repository as a ZIP:

Terminal
curl -L -o repo.zip https://github.com/username/repository/archive/refs/heads/main.zip
unzip repo.zip

Difference Between SSH and HTTPS in Git

Feature SSH HTTPS
Authentication Method Uses SSH keys (public/private key pair) Uses username + password or token
Security Level Very secure (key-based encryption) Secure but relies on proper token/password handling
Ease of Use Easy after keys are set up; no username/password prompts Easiest to start; may ask for password/token often
Setup Required Must generate SSH keys & add to GitHub/GitLab No setup needed; works out-of-the-box
Typical Clone URL git@github.com:username/repo.git https://github.com/username/repo.git
Works Behind Corporate Firewalls? Sometimes blocked (port 22) Almost always works (port 443)
Credential Storage Keys stored locally; no prompts Uses credential helpers or repeated login
Recommended For Developers pushing/pulling frequently Beginners or restricted networks

Challenges & Learning

Getting comfortable with the command line: Nothing is really difficult except that getting used to the command-line interface takes time. I was also a bit confused about the workflow of adding, committing, and then pushing.

I've had a few incidents where I couldn't push my updates to the site. Some were due to logistical issues—for example, I tried multiple times and still ran into problems pushing changes before class began. Another time, I believe I manually updated the repository using the GUI, and when I later tried to push through the command line, it showed conflicts. Until now, I've managed to resolve all these issues without consulting anyone except ChatGPT.

Exceeding the Maximum Allowable Upload File Size

One challenge I ran into was trying to upload files larger than 25 MB (combined) and failing. It took me a while to fix this issue because the files were already committed. To fix it, I used the following approach:

Terminal
git reset --soft HEAD~1
git restore --staged path/to/bigfile
rm path/to/bigfile   # if you don't want it in the repo at all
git commit -m "Commit without large file"
Command What it does Effect on your repo (mental model)
git reset --soft HEAD~1 Moves HEAD (your branch pointer) back by 1 commit, but keeps all changes from that commit in the staging area. "Undo the last commit, but keep everything staged exactly as if you were about to recommit."
git restore --staged path/to/bigfile Removes only that file from the staging area (index). The file still remains in your working folder. "Keep all other changes staged, but don't include this big file in the next commit."
rm path/to/bigfile Deletes the file from your local working directory (your filesystem). Optional: do this only if you don't need the file locally. "Remove the big file from disk so it won't get re-added accidentally."
git commit -m "Commit without large file" Creates a new commit using whatever is currently staged. Since the big file was unstaged, it won't be included. "Make a clean commit that includes everything you want, excluding the big file."

Dec 6, 2025 Update

GitLab commit history
It's been a long way. One interesting fact I realized after comparing with people in my group is that my number of commits is way higher than my peers (92 times and counting!). I wonder why...

Dec 9, 2025 Update — Site Design

Website design improvements
As this class winds down, I've been giving this site a bit of extra polish. Partly because future generations might wander in here looking for clues on how to do something similar, and partly because a project this intense deserves a halfway decent outfit.

I want this space to be something between a survival guide, a record of things that worked (and definitely things that didn't), and a pleasant place to scroll through without regret. I even added a tiny visitor counter and time tracker—not to chase numbers, but so future-me can come back one day and see whether anyone else ever fell into this rabbit hole.

If this page helps you, inspires you, or at least reassures you that confusion is part of the process… then it's doing its job.

Visitor Counter Implementation

Visitor counter implementation
For the counter I am using wrangler on my terminal, which is a CLI tool for Cloudflare Workers. I created a simple worker script that increments a counter stored in Cloudflare's KV storage each time the page is loaded. Then, I embedded the counter value into the HTML of my site using JavaScript to fetch the current count from the worker endpoint and display it dynamically on the page. This part is running outside of the website and should it fail one day (like Cloudflare went down or something), it would not affect the main functionality of the site.

A Note on Font Choice

Font selection
My font for the header is "Luckiest Guy". I don't have a strong opinion about its aesthetics, but I do like the name. Google Fonts has so many interesting fonts to choose from—something worth digging into in the future.

Vinyl Cutter — Computer Controlled Cut

Vinyl Cutting Workflow (Roland)

This is the step-by-step process I followed to cut vinyl using the Roland cutter and mods. I downloaded the MIT logo file from the MIT website and selected the PNG file for this cutting.

1. Open Mods & Load the Program

  1. Go to modsproject.org.
  2. Open the program: Programs → Roland Vinyl Cutter (Cut).
  3. Work through the modules roughly top to bottom, left to right. Remember to calculate.

2. Prepare the Image

File Requirements

Scaling

  1. Adjust the final size using the DPI or dimension fields.
  2. For SVG files, scaling is geometric and generally clean. For PNG files, changing DPI effectively rescales pixels and can distort curved edges, so adjust carefully.

Preview & Toolpaths

  1. Use the invert option if you want to reverse which regions are cut.
  2. If the cut preview does not appear, click Calculate in the Raster / Cut module to regenerate toolpaths.

3. Set Up the Vinyl Cutter

Connect & Initialize

  1. Click Get Device → Connect in mods.
  2. Make sure the vinyl cutter is powered on.

Load the Vinyl

  1. Lift the lever on the back to release the pinch rollers and adjust.
  2. Insert the vinyl so it is aligned straight along the front edge.
  3. Slide the pinch rollers so they sit within the white-marked regions on the rail.
  4. Lower the lever to clamp the vinyl in place.
  5. On the machine, select SHEET (for a sheet of vinyl) and press Enter so it can measure the material.

Set the Origin

  1. Use the arrow keys on the machine to move the cutter head to your desired starting point.
  2. Press and hold Origin to set the new origin.

Force, Speed & Preview

Send the Job

  1. Verify size, orientation, and origin in mods.
  2. When ready, click Send File to start cutting.

4. Weed the Vinyl

  1. Weed the vinyl soon after cutting; it peels more easily.
  2. Remove the unwanted areas first (background for stickers, interior shapes for stencils).
  3. It would be easier to do it with an angle or start from a different point rather than pulling straight up.
  4. Decide whether the result is a:
    • Sticker (Remove the background and keep the shapes), or
    • Stencil (Remove the shapes and keep the background).

5. Transfer the Vinyl

  1. Apply a piece of transfer tape on top of the weeded vinyl.
  2. Use a squeegee or card to press the tape down and push out air bubbles.
  3. Flip it over and carefully peel off the backing, leaving the vinyl stuck to the transfer tape.
  4. Align design on the final surface.
  5. Avoid dropping the whole sticker flat at once—start from one edge and squeegee gradually across to prevent air bubbles.
  6. Once it is fully adhered, peel off the transfer tape, leaving the vinyl on the surface.

Laser Cutter Individual Project — How to Make

Some basics about laser cutting:

1. Prepare the File in the Software

2. Open the Print Dialog

3. Set Material and Power

4. Set the Focus with the Focusing Stick

5. Prepare for Cutting

6. Start the Job

7. Monitor the Job

Kerf Test Before Laser Cutting

Kerf Test
Laser Cutting In Progress
Dalek machine week laser cutting
An update on Nov 22, 2025. Revisiting laser cutting when we tried to make parts for the Dalek in the Machine week.
Laser engraving experiments
An update on Dec 14, 2025. While I prepared for the final project, I saw some leftover material near the laser cutter and thought I'd try to adjust the power level and speed of the laser to do some engraving. Looks pretty good.

Apr 13, 2026 Update — Full Site Overhaul

With the help of Anthropic’s newly released Claude Code and Cowork, I carried out a comprehensive overhaul of this entire portfolio site. The refactoring touched every single page—from the index to all 14 weekly journals and both project pages—and focused on two fronts: code cleanliness and performance.

On the code quality side, hundreds of inline <style> blocks, scattered <br> tags, and ad-hoc class names were stripped out and replaced with a unified CSS design system. Every sub-page now shares the same semantic structure—journal-hero, panel-title, gallery, figure, codeblock—making the codebase far easier to read, maintain, and extend. Legacy scripts such as the theme toggle and duplicate year-injection snippets were consolidated into a single shared script.js.

On the performance and SEO side, Open Graph meta tags were added to all 18 pages so the site now renders proper thumbnail previews when shared on platforms like WeChat. A visitor counter backed by a Cloudflare Worker was integrated into the header, tracking both visit count and cumulative time spent across all pages. Image assets were batch-converted from PNG to JPEG where applicable to reduce payload size, and unused images were identified and cleaned out.

The entire process—from auditing the old markup, to parallel-redesigning 15 pages simultaneously via autonomous agents, to running automated verification scans—was orchestrated through Claude’s agentic workflow in a single extended session. It was a fascinating experience seeing AI-assisted tooling handle a project of this scope, and a fitting demonstration of how the skills learned in HTMAA can be combined with modern AI to push creative output further.